﻿#ifndef FD_CORE_DIRECTORY_H
#define FD_CORE_DIRECTORY_H
#pragma once

#include "kernel/OgrePlatform.h"
#include "kernel/fileengine_def.h"
#include "kernel/stringarray.h"
#include "kernel/string_def.h"
#include "kernel/Referenced.h"

namespace FD
{
	namespace Kernel
	{
		class FD_Kernel_Export Directory :  public FD::Kernel::CReferenced
		{
		public:
			Directory() {}
			virtual ~Directory() {}

		public:
			/*
			* 函数功能： 创建文件夹
			* 参    数：
			const String &strDir [in] : 目标文件夹
			* 返 回 值：TRUE成功，FALSE失败
			* 作者：
			* 日期：2012.2.13
			*/
			static bool create(const String &strDir);
			/*
			* 函数功能： 删除文件夹
			* 参    数：
			const String &strDir [in] : 目标文件夹
			* 返 回 值：TRUE成功，FALSE失败
			* 作者：
			* 日期：2012.2.13
			*/
			static bool remove(const String &strDir);
			/*
			* 函数功能： 文件夹是否存在
			* 参    数：
			const String &strDir [in] : 目标文件夹
			* 返 回 值：TRUE存在，FALSE不存在或失败
			* 作者：
			* 日期：2012.2.13
			*/
			static bool exists(const String &strDir);
			/*
			* 函数功能： 拷贝文件夹
			* 参    数：
			const String &strSrcDir [in] : 源文件夹
			const String &strDstDir [in] : 目标文件夹
			bool bOverWrite [in] : 如果存在是否覆盖
			* 返 回 值：true成功，false失败
			* 作者：
			* 日期：2012.2.13
			*/
			static bool copy(const String &strSrcDir, const String &strDstDir, bool bOverWrite = false);
			/*
			* 函数功能： 移动文件夹
			* 参    数：
			const String &strSrcDir [in] : 源文件夹
			const String &strDstDir [in] : 目标文件夹
			bool bOverWrite [in] : 如果存在是否覆盖
			* 返 回 值：true成功，false失败
			* 作者：
			* 日期：2012.2.13
			*/
			static bool move(const String &strSrcDir, const String &strDstDir, bool bOverWrite = false);
			/*
			* 函数功能： 获取当前目录下的文件
			* 参    数：
			FD::Kernel::FdStringArray &files [in] : 文件名称数组
			bool bSubDir [in] : 是否遍历子文件夹
			* 返 回 值：true成功，false失败
			* 作者：
			* 日期：2012.2.13
			*/
			static bool getFiles(const String &strDir, FD::Kernel::FdStringArray &files, bool bSubDir);
			static bool getFiles(const String &strDir, FD::Kernel::FdStringArray &files, bool bSubDir, const String &strWildcard);
			/*
			* 函数功能： 获取当前目录下的文件夹
			* 参    数：
			FD::Kernel::FdStringArray &files [in] : 文件夹名称数组
			bool bSubDir [in] : 是否遍历子文件夹
			* 返 回 值：true成功，false失败
			* 作者：
			* 日期：2012.2.13
			*/
			static bool getDirectories(const String &strDir, FD::Kernel::FdStringArray &dirs, bool bSubDir = false);
			/*
			* 函数功能： 获取当前目录的属性
			* 参    数：
			FD::Kernel::FileAttributes &attrs [out] : 属性列表
			* 返 回 值：true成功，false失败static bool getAttributes(const String &strDir, FD::Kernel::FileAttributes &attrs);
			* 作者：
			* 日期：2012.2.13
			*/
			static bool getAttributes(const String &strDir, FD::Kernel::FileAttributes &attrs);
			/*
			* 函数功能： 获取当前目录路径
			* 参    数：
			String &dir [out] : 目录路径
			* 返 回 值：true成功，false失败
			* 作者：
			* 日期：2012.2.13
			*/
			static bool getCurrentDirectory( String &dir);

			/*
			* 函数功能： 设置当前目录路径
			* 说明:此函数为Web应用程序专用，用于指定当前目录
			* 参    数：
			String &dir [out] : 目录路径
			* 返 回 值：true成功，false失败
			* 作者：
			* 日期：2014.7.4
			*/
			static bool setCurrentDirectory(const String &dir);

			/*
			* 函数功能： 获取临时目录路径
			* 参    数：
			String &dir [out] : 目录路径
			* 返 回 值：true成功，false失败
			* 作者：
			* 日期：2012.2.13
			*/
			static bool getTempDirectory( String &dir);

			static bool getSystemTempDirectory(String &dir);

			/*
			* 函数功能： 获取系统目录
			* 参    数：
			String &dir [out] : 目录路径
			* 返 回 值：true成功，false失败
			* 作者：
			* 日期：2012.2.13
			*/
			static bool getSystemDirectory( String& dir);

			/*
			* 函数功能： 获取进程名
			* 参    数：
			String &dir [out] : 进程名
			* 返 回 值：true成功，false失败
			* 作者：
			* 日期：2014.5.4
			*/
			static bool getModuleName( String& module);

			/// <summary>
			/// 格式化路径
			/// </summary>
			/// <param name=""></param>
			/// <returns></returns>
			/// <memo></memo>
			static String formatPath(const String& path);
			static String formatPath(const String& path, const String& file);

		private:
			static String ms_currentDirectory;

		};
	}
}

#endif

